<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
</head>

<body>
    <h4>Set 和 Map</h4>
    <p>（1） Set类似于数组，不过其成员值都是唯一的，没有重复的值。</p>
    <p>Set本身是一个构造函数，用来生成Set数据结构。</p>
    <p> 例如： </p>
    <p> var s = new Set();</p>
    <p> [2,3,4,5,5,2,2].map(x => s.add(x));</p>
    <p> for(i of s ){</p>
    <p> console.log(i);//2,3,4,5</p>
    <p> }</p>
    <p> //可以用数组对set进行初始化</p>
    <p> var items = new Set([1,2,2,2,2,3]);</p>
    <p> console.log(items.size);//3</p>
    <p> Set结构的方法：</p>
    <p> add(value);delete(value);has(value);clear():清除所有成员</p>
    <p> Set结构的属性：</p>
    <p> Set.prototype.constructor:构造函数，默认就是Set函数</p>
    <p style="color:#ff0000;"> Set.prototype.size:返回Set的成员总数</p>
    <p> //去除数组中重复元素</p>
    <p> function dedupe (array) {</p>
    <p> return Array.from(new Set(array));</p>
    <p> }</p>
    <p>（2） Map结构，类似于对象，也是键值对的集合，但是，“键”的范围不限定于字符串，对象也可以当作键。</p>
    <p>例如：</p>
    <p>var m = new Map();</p>
    <p>o = {</p>
    <p>p:"Hello World!";</p>
    <p>}</p>
    <p>m.set(o,"content");</p>
    <p>console.log(m.get(o));//content</p>
    <p>Map的属性：</p>
    <p>size:返回成员总数；</p>
    <p>Map的方法:</p>
    <p>set(key,value);get(key);has(key);delete(key);clear()</p>
    <p>Map的遍历</p>
    <p>map.keys():返回键名的遍历器</p>
    <p>map.values():返回键值的遍历器</p>
    <p>map.entries():返回所有成员的遍历器</p>
    <script>
         //去除数组重复元素
         var array=[3,4,8,4,3,5,9,7];
         var s=new Set();
         array.map(x=>s.add(x));
         for(var i of s){
             console.log(i);//3,4,8,5,9,7
         }
          function foo(arr){
              return Array.from(new Set(arr));
          }
          var arr=new Array(22,52,89,44,22,89);
          console.log(foo(arr));//22,52,89,44
    </script>
</body>
</html>